package com.liehu.web.fileter;

import com.netflix.zuul.ZuulFilter;
import com.netflix.zuul.context.RequestContext;
import com.netflix.zuul.exception.ZuulException;
import org.apache.http.protocol.RequestContent;

import javax.servlet.http.HttpServletRequest;

/**
 * 前台网关
 */
public class WebFilter extends ZuulFilter {
    /**
     * 设置拦截类型，pre为访问器拦截，post是访问后拦截
     * @return
     */
    @Override
    public String filterType() {
        return "pre";
    }

    /**
     * 设置拦截的优先级：如在多个拦截器中，可以设定此方法来
     * 设定拦截的优先级，数字越小，优先级越高
     * @return
     */
    @Override
    public int filterOrder() {
        return 0;
    }

    /**
     * 是否开启拦截器，true开启，false关闭
     * @return
     */
    @Override
    public boolean shouldFilter() {
        return true;
    }

    /**
     * 此处为具体的拦截操作
     * return任何值，都表示通过，访问继续执行
     * 使用 setsendzullResponse(false) 表示访问不在进行。
     *
     * @return
     * @throws ZuulException
     */
    @Override
    public Object run() throws ZuulException {
        //获取request的上下文
        RequestContext requestContext = RequestContext.getCurrentContext();
        //获取request的域
        HttpServletRequest request = requestContext.getRequest();
        //根据获取请求头Authorization，用于转发到微服务
        String header = request.getHeader("Authorization");
        //如果header不为空，就把这个请求头转发到微服务中
        if(header != null && !header.equals("")){
            requestContext.addZuulRequestHeader("Authorization",header);
        }
        return null;
    }
}
